package com.leetcode.www;
import java.util.*;
/**
 * Creared with IntelliJ IDEA.
 * Description:给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *
 * 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/group-anagrams
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * User:yxd
 * Date:2022-03-30
 * Time:22:20
 */
public class Map49 {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();

        for(int i = 0;i < strs.length;i ++){
            String str = strs[i];
            char[] nums = str.toCharArray();
            Arrays.sort(nums);//按顺序排列里面的每个字母
            String sub = new String(nums);
            List<String> list = map.getOrDefault(sub,new ArrayList<>());//看按顺序排列好的字符串,后面有相等的,就入到这个新建的字符串数组中,将原字符入进去,如果map里面已经有这个想的的拍好字符串,那就表示这两个字符串里面的每个字母数使用量都是想等的,就可以放到一个数组中,而这个数组,在放进上一个字符串的时候就已经创建好了,直接放入新的字符串就好
            list.add(str);
            map.put(sub,list);//存入这个顺序字符串和其对应的数组

        }
        return new ArrayList<List<String>>(map.values());//将map里面的键值对都放到一个新的数组中

    }
}
